package de.tudarmstadt.ukp.muip.fibqdojo.util.japanese;

import java.util.HashMap;
/**
 * Provides conversion tables to convert from<->to Hiragana and Katakana syllables 
 * @author Tobias Horsmann
 */
public class KanaConverter {

    private static HashMap<String, String> katakana2hiragana = null;
    private static HashMap<String, String> hiragana2katakana = null;

    private static String[][] conversion_table = { { "あ", "ア" }, { "い", "イ" }, { "う", "ウ" }, { "え", "エ" },
            { "か", "カ" }, { "が", "ガ" }, { "き", "キ" }, { "ぎ", "ギ" }, { "く", "ク" }, { "ぐ", "グ" }, { "け", "ケ" },
            { "げ", "ゲ" }, { "こ", "コ" }, { "ご", "ゴ" }, { "さ", "サ" }, { "ざ", "ザ" }, { "し", "シ" }, { "じ", "ジ" },
            { "せ", "セ" }, { "ぜ", "ゼ" }, { "そ", "ソ" }, { "ぞ", "ゾ" }, { "す", "ス" }, { "ず", "ズ" }, { "た", "タ" },
            { "だ", "ダ" }, { "ち", "チ" }, { "ぢ", "ヂ" }, { "つ", "ツ" }, { "づ", "ヅ" }, { "て", "テ" }, { "で", "デ" },
            { "と", "ト" }, { "ど", "ド" }, { "な", "ナ" }, { "に", "二" }, { "ぬ", "ヌ" }, { "ね", "ネ" }, { "の", "ノ" },
            { "は", "ハ" }, { "ば", "バ" }, { "ぱ", "パ" }, { "ひ", "ヒ" }, { "び", "ビ" }, { "ふ", "フ" }, { "ぶ", "ブ" },
            { "ぷ", "プ" }, { "ほ", "ホ" }, { "ぼ", "ボ" }, { "ぽ", "ポ" }, { "ま", "マ" }, { "み", "ミ" }, { "む", "ム" },
            { "め", "メ" }, { "も", "モ" }, { "や", "ヤ" }, { "ゆ", "ユ" }, { "よ", "ヨ" }, { "ら", "ラ" }, { "り", "リ" },
            { "る", "ル" }, { "れ", "レ" }, { "ろ", "ロ" }, { "わ", "ワ" }, { "を", "ヲ" }, { "ん", "ン" }, { "っ", "ッ" },
            { "ぁ", "ァ" }, { "ぃ", "ィ" }, { "ぅ", "ゥ" }, { "ぉ", "ォ" }, { "ぇ", "ェ" }, { "ゎ", "ヮ" }, { "ゃ", "ャ" },
            { "ゅ", "ュ" }, { "ょ", "ョ" } };

    public static String katakana2hiragana(String syllable) {
        loadKatakana2HirganaTable();
        String result = katakana2hiragana.get(syllable);
        if (result != null) {
            return result;
        }
        return syllable;
    }

    public static String hiragana2katakana(String syllable) {
        loadHirgana2KatakanaTable();
        String result = hiragana2katakana.get(syllable);
        if (result != null) {
            return result;
        }
        return syllable;
    }

    private static void loadHirgana2KatakanaTable() {
        if (hiragana2katakana == null) {
            hiragana2katakana = new HashMap<String, String>();
            for (String[] entry : conversion_table) {
                hiragana2katakana.put(entry[0], entry[1]);
            }
        }
    }

    private static void loadKatakana2HirganaTable() {
        if (katakana2hiragana == null) {
            katakana2hiragana = new HashMap<String, String>();
            for (String[] entry : conversion_table) {
                katakana2hiragana.put(entry[1], entry[0]);
            }
        }
    }

}
